/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.compassion.action;

import com.opensymphony.xwork2.ActionContext;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.ServletActionContext;
import sv.com.compassion.dao.GenericoDAO;
import sv.com.compassion.entidades.Beneficiario;
import sv.com.compassion.entidades.Cdi;
import sv.com.compassion.entidades.Municipio;
import sv.com.compassion.entidades.Nivelescolaridad;
import sv.com.compassion.util.Combo;
import sv.com.compassion.util.ComunAction;
import sv.com.compassion.util.Constantes;
import sv.com.compassion.util.Fecha;
import sv.com.compassion.util.JqGrid;
import sv.com.compassion.util.RowsGrid;

/** Interacción del mantenimiento Beneficiario
 * @author geovany
*/

public class BeneficiarioAction extends ComunAction {
    private GenericoDAO genericoDAO;
    private Beneficiario beneficiarios;
    private String  IDcdi;
  /*  private String NUMpar;
    private String NOMben;
    private String APEben;*/
    private String EDAben;
  /*  private String NOMenc;
    private String APEenc;*/
    private String VERhis;
    private String cumpleanos;
    private String fecNac;
    private String codben;    
    private String accion;
    
/**
 *Constructor.  
 *@param GenericoDAO interface donde se encuentran los métodos para acceder a 
 * a la clase entidad Beneficiario. 
 */
    
    

    public BeneficiarioAction(GenericoDAO genericoDAO){
        this.genericoDAO = genericoDAO;
        beneficiarios = new    Beneficiario(); 
        beneficiarios.setIdNivEscolaridad(new Nivelescolaridad());
        beneficiarios.setIdMunicipio(new Municipio());
        beneficiarios.setIdCdi(new Cdi());
    }

/**
 * Busca el método que se ejecutara
 */    
    @Override
    public String execute(){
        buscarMetodo(beneficiarios);        
        return null;
    }
 /**
 * @param objeto de la entidad Beneficiario
 * Inserta un nuevo Beneficiario usando la entidad Beneficiario
 */
    @Override
    public void agregarEntidad(Object o) {
    }
 /**
 * @param objeto de la entidad Beneficiario
 * Actualiza a cero el estado del beneficiario que se recibe en el objeto
 */
    @Override
    public void borrarEntidad(Object o) {
        List<Beneficiario> listBene;
        Beneficiario b;
        try{
            if(getId()!=null){
                listBene = genericoDAO.find("select  b FROM Beneficiario b where b.idBeneficiario = " + getId(), null, null);
                if(!listBene.isEmpty()){
                    b = listBene.get(0);
                    b.setEstBeneficiario(0);
                    genericoDAO.update(b);
                }
            }            
        }catch(Exception e){
            Logger.getLogger(BeneficiarioAction.class.getName()).log(Level.SEVERE, null, e);
            enviarMensajeStatic(Constantes.MENSAJE_ERROR+e.getCause().toString(), getResponse());
        }
    }
 /**
 * @param objeto de la entidad Beneficiario
 * Actualiza datos del beneficiario, ademas esté método se utiliza para actualizar edad de todos los beneficiarios
 *  de un CDI en específico este CDI se conoce gracias al usuario que se encuentra en sesión.
 */
    @Override
    public void editarEntidad(Object o) {
        Beneficiario b;   
        List<Beneficiario> beneficiarioEdit = null;
        SimpleDateFormat sdf    =   new SimpleDateFormat("dd/MM/yyyy");
        Map session = ActionContext.getContext().getSession();
        String idUsuario = session.get("idUsuario").toString();
        try{
            accion = getRequest().getParameter("accion");


            /*********************************Bloque para actualizar edades************************************/
            if(accion!=null && accion.equals("true")){
                      String  sql = "SELECT b from Beneficiario b  where b.idCdi in (select idCdi from Asociacion where idEmpleado = "+idUsuario+" )";
                      beneficiarioEdit = genericoDAO.find(sql,null,null);
                      for(Beneficiario be: beneficiarioEdit){
                        Beneficiario    ben =   new Beneficiario();
                        ben = be;
                        ben.setEdaBeneficiario(edad(sdf.format(be.getFecNacimiento())));
                        genericoDAO.update(ben);

                    }
                      /********************Para enviar un msj a jsp Beneficiario*****************************/
                       List<Combo>  micombo    = new ArrayList<Combo>();
                       Combo        combo      = new Combo();
                       combo.setValor("");
                       combo.setDescripcion("success");
                       micombo.add(combo);
                       JSONArray jo = JSONArray.fromObject(micombo);
                       enviarJsonNavegador(getResponse(), jo);
            }else{
                /******************************Termina bloque para actualizar edades********************************************************/

                b = (Beneficiario)o;
                b.setIdBeneficiario(new Integer(getId()));
              /*  for(Beneficiario bEdit: beneficiarioEdit){
                    setIdCdi(bEdit.getIdCdi().getIdCdi());
                }*/
                //String idUsuario = session.get("idUsuario").toString();



                setIDcdi(b.getIdCdi().getIdCdi());
                setIdMunicipio(b.getIdMunicipio().getIdMunicipio());
                setIdNivEscolaridad(b.getIdNivEscolaridad().getIdNivelEscolaridad());
                setIdCdi(b.getIdCdi().getIdCdi());



                setAuModUsr(Integer.parseInt(idUsuario));
                setAudModDat(new Date());

                genericoDAO.update(b);
            }     
        }catch(Exception e){
            Logger.getLogger(BeneficiarioAction.class.getName()).log(Level.SEVERE, null, e);
            enviarMensajeStatic(Constantes.MENSAJE_ERROR+e.getCause().toString(), getResponse());
        }
    }
 /**
 * Este método realiza las búsquedas de Beneficiarios para llenar el grid del mantenimiento
 * esperando los valores de los filtros:
 *       IDcdi,
 *       EDAben,
 *       VERhis, 
 *       fecNac,
 *       codben.
 */    
       @Override
    public void alimentarGrid() {
        JqGrid jg = new JqGrid();
        
        Map session = ActionContext.getContext().getSession();
        String idUsuario = session.get("idUsuario").toString();
        String idCargo = session.get("idCargo").toString();
        
        int total = 0;
        List<Beneficiario> listaBeneficiario = null;
        String query="";
        IDcdi = getRequest().getParameter("IDcdi");
    /*    NUMpar = getRequest().getParameter("NUMpar");
        NOMben = getRequest().getParameter("NOMben");
        APEben = getRequest().getParameter("APEben");*/
        EDAben = getRequest().getParameter("EDAben");
      /*  NOMenc = getRequest().getParameter("NOMenc");
        APEenc = getRequest().getParameter("APEenc");*/
        VERhis = getRequest().getParameter("VERhis");
        fecNac = getRequest().getParameter("fecNac");
        codben = getRequest().getParameter("codben");
      /*  String queryNomBeneficiario = "";
        String queryNumPartida = "";
        String queryApeBeneficiario = "";*/
        String queryIdCdi = "";
        String queryIdGen = "";
        String queryEdaBeneficiario = "";
     /*   String queryNomEncargado = "";
        String queryApeEncargado = "";*/
        String queryCodBen = "";
        String queryFecNacBen = "";
        
        String queryAux = "";
        if(idCargo.equals("6") || idCargo.equals("7") || idCargo.equals("8") || idCargo.equals("9")){
            queryAux = "b.idCdi IN (SELECT x.idCdi FROM Asociacion x WHERE x.idEmpleado = '" + idUsuario + "') and ";
        }
        
   //     queryNomBeneficiario = "b.nomBeneficiario like upper('%" + NOMben + "%') ";
        queryCodBen = "b.codBeneficiario like upper('%" + codben + "%') ";
        if(!IDcdi.equals("") || !EDAben.equals("")){
        /*    if(!NUMpar.equals("")){
                queryNumPartida = "and b.numPartida = '" + NUMpar + "' ";
            }
            if(!APEben.equals("")){
                queryApeBeneficiario = "and b.apeBeneficiario like upper('%" + APEben + "%') ";
            }*/
            if(!IDcdi.equals("")){
                queryIdCdi = "and b.idCdi = '" + IDcdi + "' ";
            }
            if(!EDAben.equals("")){
                queryEdaBeneficiario = "and b.edaBeneficiario = '" + EDAben + "' ";
            }
       /*     if(!NOMenc.equals("")){
                queryNomEncargado = "and DECODE(b.nomEncargado,'"+clave+"') like ('%" + NOMenc + "%') ";
            }
            if(!IDgen.equals("")){
                if(IDgen.equals("0"))
                    queryIdGen = "b.sexBenficiario = M and ";
                else
                    queryIdGen = "b.sexBeneficiario = F and ";
            }*/
        }
        if(!fecNac.equals("")){
            queryFecNacBen = "and b.fecNacimiento = '" + fecNac + "' ";
        }
        String verHistorial;
        String verHistorialTemp = "";
        String verHistorialTemp2 = "";
        if(VERhis.equals("true")){
            verHistorial = "0";
            verHistorialTemp = "1";
            verHistorialTemp2 = "-1";
        }else{
            verHistorial = "1";
            verHistorialTemp = "1";
            verHistorialTemp2 = "1";
        }
        try{
                if(getSearch()!= null && getSearch().equals("true")){
                    

                }else{ 
                        query = "SELECT b from Beneficiario b where "
                        + queryAux
                      /*  + queryNomBeneficiario
                        + queryNumPartida
                        + queryApeBeneficiario*/
                        + queryCodBen
                        + queryFecNacBen
                        + queryIdCdi
                        + queryIdGen
                        + queryEdaBeneficiario
                     /*   + queryNomEncargado
                        + queryApeEncargado*/
                        + "and (b.estBeneficiario like upper('" + verHistorial + "') or "
                        + "b.estBeneficiario like upper('" + verHistorialTemp + "') or "
                        + "b.estBeneficiario like upper('" + verHistorialTemp2 + "'))"
                        + " ORDER BY b.codBeneficiario " + getSord();
                    listaBeneficiario = genericoDAO.find(query,getRows(),(getRows()*getPage())-getRows());
                    query = "SELECT COUNT(b) from Beneficiario b where "
                        + queryAux
                        + queryCodBen
                        + queryFecNacBen
                    /*    + queryNomBeneficiario
                        + queryNumPartida
                        + queryApeBeneficiario*/
                        + queryIdCdi
                       /* + queryEdaBeneficiario
                        + queryNomEncargado
                        + queryApeEncargado*/
                        + "and (b.estBeneficiario like upper('" + verHistorial + "') or "
                        + "b.estBeneficiario like upper('" + verHistorialTemp + "') or "
                        + "b.estBeneficiario like upper('" + verHistorialTemp2 + "'))";
                    total = genericoDAO.countRow(query);
                }
                //configuraciones basicas
                jg.setPage(getPage());
                jg.setRecords(total);
                jg.setTotal((int) Math.ceil((double) total / (double) getRows()));
                jg.setSord(getSord());
                jg.setSidx(getSidx());
                List<RowsGrid> rows = new ArrayList<RowsGrid>();
             //   for(Beneficiario b: listaBeneficiario){
                for(Beneficiario b: listaBeneficiario){
                    RowsGrid r = new RowsGrid(); 
                    r.setId(b.getIdBeneficiario().toString());
                    List cell = new ArrayList();
                    cell.add(b.getCodBeneficiario());
                 /*   cell.add(b.getNumPartida());
                    cell.add(b.getNomBeneficiario());
                    cell.add(b.getApeBeneficiario());
                    cell.add(b.getDirBeneficiario());*/
                    cell.add(b.getIdMunicipio().getIdMunicipio());
                    cell.add(b.getIdMunicipio().getNomMunicipio());
                    cell.add(b.getEdaBeneficiario());
                    if(b.getSexBeneficiario().equals("M")){
                        cell.add("Masculino");
                    }else{
                        cell.add("Femenino");
                    }
                    
                    cell.add(b.getIdNivEscolaridad().getIdNivelEscolaridad());
                    cell.add(b.getIdNivEscolaridad().getNomNivelEscolaridad());
                 //   cell.add(b.getTelBeneficiario());
                    cell.add(b.getFecNacimiento().toString());
                    if(b.getEstBeneficiario() == 1){
                        cell.add("Activo");
                    }else{
                        if(b.getEstBeneficiario() == 0){
                            cell.add("En Proceso");
                        }else{
                            cell.add("Inactivo");
                        }
                    }
                    if(b.getFecProFeBeneficiario() == null){
                        cell.add("");
                    }else{
                        cell.add(b.getFecProFeBeneficiario().toString());
                    }
                    
                  //  cell.add(b.getProfesionDeFe());
                  /*  cell.add(b.getNomEncargado());
                    cell.add(b.getApeEncargado());
                    cell.add(b.getDuiEncargado());*/
                    cell.add(b.getIdCdi().getIdCdi());

                    cell.add(b.getIdCdi().getIdCdi());
                    cell.add(b.getIdCdi().getNomCdi());
                    
                  /*  cell.add(b.getAuAddUsr());
                    cell.add(b.getAuAddDat().toString());*/
                    
                    r.setCell(cell);
                    rows.add(r);
                }

                jg.setRows(rows);
                JSONObject jo = JSONObject.fromObject(jg);
                enviarJsonNavegador(getResponse(), jo);
        }catch(Exception e){
            Logger.getLogger(BeneficiarioAction.class.getName()).log(Level.SEVERE, null, e);
            enviarMensajeStatic(Constantes.MENSAJE_ERROR+e.getCause().toString(), getResponse());
        }
    }
    
    public void setCodBeneficiario(String codBeneficiario){
        beneficiarios.setCodBeneficiario(codBeneficiario);
    }
    public String getCodBeneficiario(){
        return beneficiarios.getCodBeneficiario();
    }

    public void setNomBeneficiario(String nombreBen) {
        beneficiarios.setNomBeneficiario(nombreBen);
    }

    public String getNomBeneficiario() {
        return beneficiarios.getNomBeneficiario();
    }

    public void setApeBeneficiario(String apeBeneficiario) {
        beneficiarios.setApeBeneficiario(apeBeneficiario);
    }

    public String getApeBeneficiario() {
        return beneficiarios.getApeBeneficiario();
    }

    public void setDirBeneficiario(String dirBeneficiario) {
        beneficiarios.setDirBeneficiario(dirBeneficiario);
    }

    public void setEdaBeneficiario(Integer edaBeneficiario) {
        beneficiarios.setEdaBeneficiario(edaBeneficiario);
    }

    public void setSexBeneficiario(String sexBeneficiario) {
        beneficiarios.setSexBeneficiario(sexBeneficiario);
    }
    
    public void setNumPartida(Integer numPartida) {
        beneficiarios.setNumPartida(numPartida);
    }
    public Integer getNumPartida() {
        return beneficiarios.getNumPartida();
    }


    
    public String getSexBeneficiario() {
        return beneficiarios.getSexBeneficiario();
    }

    public Integer getEdaBeneficiario() {
        return beneficiarios.getEdaBeneficiario();
    }
    
    public String getDirBeneficiario() {
        return beneficiarios.getDirBeneficiario();
    }

    public void setTelBeneficiario(String telBeneficiario) {
        beneficiarios.setTelBeneficiario(telBeneficiario);
    }

    public String getTelBeneficiario() {
        return beneficiarios.getTelBeneficiario();
    }

    public void setEstBeneficiario(int estBeneficiario) {
        beneficiarios.setEstBeneficiario(estBeneficiario);
    }

    public int getEstBeneficiario() {
        return beneficiarios.getEstBeneficiario();
    }

     public void setFecNacimiento(String fecNacimiento) {
        try {
            beneficiarios.setFecNacimiento(Fecha.string2Date(fecNacimiento));
        } catch (ParseException ex) {
            Logger.getLogger(BeneficiarioAction.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String getFecNacimiento() {
        return Fecha.date2String(beneficiarios.getFecNacimiento());
    }
    public void setFecProFeBeneficiario(String fecProFeBeneficiario) {
        try {
            if(fecProFeBeneficiario != null && !fecProFeBeneficiario.equals(""))
                beneficiarios.setFecProFeBeneficiario(Fecha.string2Date(fecProFeBeneficiario));
        } catch (ParseException ex) {
            Logger.getLogger(BeneficiarioAction.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String getFecProFeBeneficiario() {
        return Fecha.date2String(beneficiarios.getFecProFeBeneficiario());
    }

    public void setNomEncargado (String nomEncargado) {
        beneficiarios.setNomEncargado(nomEncargado);
    }

    public String getNomEncargado() {
        return beneficiarios.getNomEncargado();
    }

    public void setApeEncargado(String apeEncargado) {
        beneficiarios.setApeEncargado(apeEncargado);
    }

    public String getApeEncargado() {
        return beneficiarios.getApeEncargado();
    }

    public void setDuiEncargado(String duiEncargado) {
        beneficiarios.setDuiEncargado(duiEncargado);
    }

    public String getDuiEncargado() {
        return beneficiarios.getDuiEncargado();
    }
    public Integer getIdNivEscolaridad() {
        return beneficiarios.getIdNivEscolaridad().getIdNivelEscolaridad();
    }

    public void setIdNivEscolaridad(Integer idNivEscolaridad) {
       beneficiarios.getIdNivEscolaridad().setIdNivelEscolaridad(idNivEscolaridad) ;
    }
    public Integer getIdCdi() {
        return beneficiarios.getIdCdi().getIdCdi();
    }

    public void setIdCdi(Integer idCdi) {
       beneficiarios.getIdCdi().setIdCdi(idCdi) ;
    }    
    
    public Integer getIdMunicipio() {
        return beneficiarios.getIdMunicipio().getIdMunicipio();
    }

    public void setIdMunicipio(Integer idMunicipio) {
       beneficiarios.getIdMunicipio().setIdMunicipio(idMunicipio) ;
    }
    
    public Integer getIDcdi() {
        return beneficiarios.getIdCdi().getIdCdi();
    }

    public void setIDcdi(Integer IDcdi) {
        beneficiarios.getIdCdi().setIdCdi(IDcdi);
    }
    
    public Integer getAuAddUsr() {
        return beneficiarios.getAuAddUsr();
    }

    public void setAuAddUsr(Integer auAddUsr) {
        beneficiarios.setAuAddUsr(auAddUsr);
    }

    public Date getAuAddDat() {
        return beneficiarios.getAuAddDat();
    }

    public void setAuAddDat(Date auAddDat) {
        beneficiarios.setAuAddDat(auAddDat);
    }

    public Integer getAuModUsr() {
        return beneficiarios.getAuModUsr();
    }

    public void setAuModUsr(Integer auModUsr) {
        beneficiarios.setAuModUsr(auModUsr);
    }

    public Date getAudModDat() {
        return beneficiarios.getAudModDat();
    }

    public void setAudModDat(Date audModDat) {
        beneficiarios.setAudModDat(audModDat);
    }
 /**
 * Permite presentar el reporte de Beneficiarios y cumpleañeros del mes actual,
 * este puede recibir como filtros:
 *       cumpleanos: para saber que tipo de reporte se representara, <br>
 *       IDcdi, 
 *       EDAben, 
 *       VERhis,
 *       fecNac,
 *       codben <br>
 * @return  book ya completo con los datos que se desea expulsar
 */    
    @Override
    public void reporteXls() {
        HSSFWorkbook libro  = null;
        OutputStream out    = null;
        HttpServletResponse response = ServletActionContext.getResponse();
        cumpleanos = getRequest().getParameter("cumpleanos"); // Para Definir que reporte se invoca
        try{
                out = response.getOutputStream();            
                String ruta = "";
                if(cumpleanos != null && cumpleanos.equals("true")){
                    ruta = ServletActionContext.getRequest().getSession().getServletContext().getRealPath("/reports/reportCumpleaños.xlt");
                }else{
                    ruta = ServletActionContext.getRequest().getSession().getServletContext().getRealPath("/reports/reportBeneficiarios.xlt");
                }
                FileInputStream stream = new FileInputStream(ruta); // obtenemos al archivo
                libro = new HSSFWorkbook(stream);      // el libro de trabajo

                response.setHeader("Pragma", "cache");          // Para mostrar ventana de apertura del archivo
                response.setContentType("application/ms-excel");
                
                if(cumpleanos != null && cumpleanos.equals("true")){
                    response.setHeader("Content-Disposition","attachment;filename=reportCumpleanosDelMes.xls");
                }else{
                    response.setHeader("Content-Disposition","attachment;filename=reportBeneficiarios.xls");
                }    
                    
                libro = generarExcel(libro); 

                libro.write(out);
                out.flush();
                out.close();
        }catch(Exception e){
          e.printStackTrace();
        }         
    }

  private HSSFWorkbook generarExcel(HSSFWorkbook book) {
          /**
     * EL ESTILO DEL REPORTE
     */
      HSSFCellStyle styleBordere = book.createCellStyle();
      HSSFFont fontReport = book.createFont();
      fontReport.setFontName("Arial");
      fontReport.setFontHeightInPoints((short)8);
      styleBordere.setFont(fontReport);
      styleBordere.setBorderBottom(styleBordere.BORDER_THIN);
      styleBordere.setBorderLeft(styleBordere.BORDER_THIN);
      styleBordere.setBorderRight(styleBordere.BORDER_THIN);
      styleBordere.setBorderTop(styleBordere.BORDER_THIN);
      styleBordere.setVerticalAlignment((short)17);
      styleBordere.setAlignment((short)2);
      
      
      List<Beneficiario> listaBeneficiario = null;
      cumpleanos = getRequest().getParameter("cumpleanos"); // Para Definir que reporte se invoca

      HSSFSheet sheet = book.getSheet("Hoja1"); //nombre de la hoja 
      HSSFRow row = sheet.getRow(1);
      HSSFCell celda = null;
      
      Map session = ActionContext.getContext().getSession();
      String idUsuario = session.get("idUsuario").toString();
      String idCargo = session.get("idCargo").toString();
      IDcdi = "";
      EDAben = "";
      VERhis = "";
      fecNac = "";
      codben = "";
      IDcdi = getRequest().getParameter("IDcdi");
    /*    NUMpar = getRequest().getParameter("NUMpar");
        NOMben = getRequest().getParameter("NOMben");
        APEben = getRequest().getParameter("APEben");*/
        EDAben = getRequest().getParameter("EDAben");
      /*  NOMenc = getRequest().getParameter("NOMenc");
        APEenc = getRequest().getParameter("APEenc");*/
        VERhis = getRequest().getParameter("VERhis");
        fecNac = getRequest().getParameter("fecNac");
        codben = getRequest().getParameter("codben");
      String query="";

      String queryIdCdi = "";
      String queryEdaBeneficiario = "";
     /*   String queryNomEncargado = "";
        String queryApeEncargado = "";*/
      String queryCodBen = "";
      String queryFecNacBen = "";

      String queryAux = "";
      if(idCargo.equals("6") || idCargo.equals("7") || idCargo.equals("8") || idCargo.equals("9")){
         queryAux = "b.idCdi IN (SELECT x.idCdi FROM Asociacion x WHERE x.idEmpleado = '" + idUsuario + "') and ";
      }
        
   //     queryNomBeneficiario = "b.nomBeneficiario like upper('%" + NOMben + "%') ";
      queryCodBen = "b.codBeneficiario like upper('%" + codben + "%') ";
      if((IDcdi!=null && !IDcdi.equals("")) || (EDAben!=null && !EDAben.equals(""))){
        /*    if(!NUMpar.equals("")){
                queryNumPartida = "and b.numPartida = '" + NUMpar + "' ";
            }
            if(!APEben.equals("")){
                queryApeBeneficiario = "and b.apeBeneficiario like upper('%" + APEben + "%') ";
            }*/
            if(IDcdi!= null && !IDcdi.equals("")){
                queryIdCdi = "and b.idCdi = '" + IDcdi + "' ";
            }
            if(EDAben != null && !EDAben.equals("")){
                queryEdaBeneficiario = "and b.edaBeneficiario = '" + EDAben + "' ";
            }
       /*     if(!NOMenc.equals("")){
                queryNomEncargado = "and DECODE(b.nomEncargado,'"+clave+"') like ('%" + NOMenc + "%') ";
            }
            if(!APEenc.equals("")){
                queryApeEncargado = "and DECODE(b.apeEncargado,'"+clave+"') like ('%" + APEenc + "%') ";
            }*/
       }
       if(fecNac!=null && !fecNac.equals("")){
            queryFecNacBen = "and b.fecNacimiento = '" + fecNac + "' ";
       }
       String verHistorial;
       String verHistorialTemp = "";
       String verHistorialTemp2 = "";
       if(VERhis!= null && VERhis.equals("true")){
            verHistorial = "0";
            verHistorialTemp = "1";
            verHistorialTemp2 = "-1";
       }else{
            verHistorial = "1";
            verHistorialTemp = "1";
            verHistorialTemp2 = "1";
       }
       query = "SELECT b from Beneficiario b where "
            + queryAux
          /*  + queryNomBeneficiario
            + queryNumPartida
            + queryApeBeneficiario*/
            + queryCodBen
            + queryFecNacBen
            + queryIdCdi
            + queryEdaBeneficiario
         /*   + queryNomEncargado
            + queryApeEncargado*/
            + "and (b.estBeneficiario like upper('" + verHistorial + "') or "
            + "b.estBeneficiario like upper('" + verHistorialTemp + "') or "
            + "b.estBeneficiario like upper('" + verHistorialTemp2 + "'))"
            + " ORDER BY b.codBeneficiario ";
        listaBeneficiario = genericoDAO.find(query,null,null);

      int col = 1;
      int fila  = 11;              
      Date today    =   new Date();
      SimpleDateFormat  sdf     =   new SimpleDateFormat("dd/MMM/yyyy");
      SimpleDateFormat  sdfC    =   new SimpleDateFormat("dd/MMMM");
      String    hoy =   sdf.format(today);
      if(cumpleanos != null && cumpleanos.equals("true")){ // se invoco el reporte de cumpleaños
          query  = "SELECT b from Beneficiario b where ";
          query += "b.idCdi IN (SELECT x.idCdi FROM Asociacion x WHERE x.idEmpleado = '" + idUsuario + "') and ";
          query += "  month(CURDATE()) = month(b.fecNacimiento) and b.estBeneficiario = '1'  ";
          listaBeneficiario = genericoDAO.find(query + " order by b.fecNacimiento ",null,null);
          row = sheet.createRow(2);//Para fecha de generación

          celda = row.createCell(2);
          celda.setCellValue(new HSSFRichTextString(String.valueOf(hoy)));
          celda.setCellStyle(styleBordere);
          
          for(Beneficiario b: listaBeneficiario){
                col = 1;
                row = sheet.createRow(fila);

                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(b.getCodBeneficiario().toString())));
                celda.setCellStyle(styleBordere);
          
          /*      celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(b.getNomBeneficiario() +" "+ b.getApeBeneficiario())));
                celda.setCellStyle(styleBordere);*/
                
                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(sdfC.format(b.getFecNacimiento()))));
                celda.setCellStyle(styleBordere);                
          
                fila ++;
          }
      }else{
          listaBeneficiario = genericoDAO.find(query,null,null);
          row = sheet.createRow(3);//Para fecha de generación

          celda = row.createCell(5);
          celda.setCellValue(new HSSFRichTextString(String.valueOf(hoy)));
          celda.setCellStyle(styleBordere);
          for(Beneficiario b: listaBeneficiario){

                col = 2;
                row = sheet.createRow(fila);

                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(b.getCodBeneficiario().toString())));
                celda.setCellStyle(styleBordere);

           /*     celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(b.getApeBeneficiario())+" "+String.valueOf(b.getNomBeneficiario())));
                celda.setCellStyle(styleBordere);*/

                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(b.getEdaBeneficiario())));
                celda.setCellStyle(styleBordere);

                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(b.getSexBeneficiario())));
                celda.setCellStyle(styleBordere);

                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(sdf.format(b.getFecNacimiento()))));
                celda.setCellStyle(styleBordere);
              /*  celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(b.getApeEncargado())+" "+String.valueOf(b.getNomEncargado())));
                celda.setCellStyle(styleBordere);                

                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(b.getDirBeneficiario())));
                celda.setCellStyle(styleBordere);       

                celda = row.createCell(col++);
                celda.setCellValue(new HSSFRichTextString(String.valueOf(b.getTelBeneficiario() != null ? b.getTelBeneficiario() : "" )));
                celda.setCellStyle(styleBordere);     */         

                fila ++;
          }     
      }
      return book;  
    }
    
   public int edad(String fecha_nac) {     //fecha_nac debe tener el formato dd/MM/yyyy
   
    Date fechaActual = new Date();
    SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
    String hoy = formato.format(fechaActual);
    String[] dat1 = fecha_nac.split("/");
    String[] dat2 = hoy.split("/");
    int anos = Integer.parseInt(dat2[2]) - Integer.parseInt(dat1[2]);
    int mes = Integer.parseInt(dat2[1]) - Integer.parseInt(dat1[1]);
    if (mes < 0) {
      anos = anos - 1;
    } else if (mes == 0) {
      int dia = Integer.parseInt(dat2[0]) - Integer.parseInt(dat1[0]);
      if (dia < 0) {
        anos = anos - 1;
      }
    }
    return anos;
  }
        
}
